#include <iostream>
#include <sys/types.h>
#include <unistd.h>
#include <signal.h>
using namespace std;
/*
    typedef void (*sighandler_t)(int);
    sighandler_t signal(int signum, sighandler_t handler);
*/

void doElse(int signum)
{
    cout << "收到了[" << signum << "]号信号" << endl;
}

// int main()
// {
//     signal(SIGINT, doElse); // 若进程收到2号信号，则执行doElse(2);
//     signal(3, doElse);      // 若进程收到3号信号，则执行doElse(3);
//     cout << "I am a process. My pid: " << getpid() << endl;
//     while (true)
//     {
//         sleep(1);
//     }
//     return 0;
// }

/*
NAME
       raise - send a signal to the caller

SYNOPSIS
       #include <signal.h>

       int raise(int sig);
*/

// int main()
// {
//     cout << "I am a process. My pid is : " << getpid() << endl;
//     signal(SIGABRT, doElse);
//     signal(9, doElse);
//     while (true)
//     {
//         sleep(1);
//         raise(SIGABRT);
//         // raise(9);
//     }
//     return 0;
// }

// int cnt = 1;

// void counter(int signum)
// {
//     cout << cnt << endl;
//     exit(-1);
// }

// int main()
// {
//     signal(SIGALRM, counter);
//     alarm(1);
//     while (true)
//         ++cnt;
//     return 0;
// }

typedef void (*FUNC)(void);
int main()
{
    // signal(SIGILL, doElse);
    const static unsigned char s[4] = {0xff, 0xff, 0xff, 0xff};
    FUNC f = (FUNC)s;
    f();
    return 0;
}